﻿#define _CRT_SECURE_NO_WARNINGS

//二维数组
//#include<stdio.h>
//int main()
//{
//	int arr1[3][2] = { 1,2,3,4,6 };//一行一行按顺序补充，{}中5个元素对应第一行3个第二行2个
//	int arr2[3][2] = { {1,2} ,{ 0,0 } ,{4,5} };//3行2列，{}中每个{}代表一行，一共三行，每个{}中2个元素
//	int arr3[][2] = { {},{},1,2,3 };//可以省略行不可以省略列，arr3中有4行（根据后面{}中元素判断）2列
//	printf("%d", arr1[1][1]);//二维数组下标同一维数组一致，也是从0开始，arr1可取到[2][1]
//	return 0;//以上均是不完全初始化，完全初始化就是把每个元素均定义上数字
//}
//#include<stdio.h>
//int main()
//{
//	int arr[5][4] = { {0,0,0,0},{1,2,3,4},{5,4,3,2},{7,7,7,7},{1,1,1,1} };
//	int i = 0;
//	int j = 0;
//	
//	//for (i = 0; i <= 4; i++)//先输入行
//	//{
//	//	for (j = 0; j <= 3; j++)
//	//	{
//	//		scanf("%d ",&arr[i][j]);//输入
//	//	}
//	//	printf("\n");
//	//}
//	for (i = 0; i <= 4; i++)//先打印行
//	{
//		for (j = 0; j <= 3; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	//for (j = 0; j <= 3; j++)//先打印列，上面打印结果的转置
//	//{
//	//	for (i = 0; i <= 4; i++)
//	//	{
//	//		printf("%d ",arr[i][j]);
//	//	}
//	//	printf("\n");
//	//}
//	return 0;
//}
//打印地址
//#include<stdio.h>
//int main()
//{
//	int arr[4][4] = { 0 };
//	int i = 0;
//	int j = 0;
//	for (i = 0; i <= 3; i++)
//	{
//		for (j = 0; j <= 3; j++)
//		{
//			printf("arr[%d][%d]的地址是:%p\n", i, j, &arr[i][j]);//后面%p对应的要加符号&
//		}
//	}
//	//这里要注意输出的结果是16进制的，换算一下各个数值之间刚好相差4，意味着虽然换行但各个数值紧密排列
//	//A-10,B-11,C-12,D-13,E-14,F-15
//	return 0;
//}
//变长数组，在VS2022上，虽然⽀持⼤部分C99的语法，没有⽀持C99中的变⻓数组，没法测试，可以再DevC++上测试
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int arr[n];
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	for (i = 0; i < n; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//小小的数组练习
//#include<stdio.h>
//#include<string.h>
//#include<windows.h>
//#include<stdlib.h>
//int main()
//{
//	char arr1[] = { "Hello world !" };
//	char arr2[] = { "*************" };
//	int left = 0;//下标从0开始，下面-1同理
//	int right = strlen(arr1) - 1;//strlen需要头文件string.h
//	while (left <= right)
//	{
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		left++;
//		right--;
//		printf("%s\n", arr2);
//		Sleep(1000);//运行暂停一定时间，单位是毫秒(ms，1s = 1000ms),Sleep需要头文件windows.h
//		system("cls");//清除屏幕上的文字，需要头文件stdlib.h
//	}
//	printf("%s\n", arr2);
//	return 0;
//}



//找下标

//通用方法
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);//找出arr中数字个数
//	int k = 7;//这里为找7的下标
//	int flag = 1;
//	for (i = 0; i <= sz; i++)
//	{
//		if (k == arr[i])
//		{
//			printf("%d的下标为:%d\n", k, i);
//			flag = 0;
//			break;
//		}
//	}
//	if (flag)
//	{
//		printf("找不到%d的下标\n", k);
//	}
//	printf("sz=%d", sz);
//	return 0;
//}

//二分查找法(也叫折半查找法)，比较快捷，但是只适用有序的整数数组
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[1]);
//	int left = 0;
//	int right = sz - 1;
//	int k = 7;//k可以是任意整数(可负可正)
//	int flag = 1;
//	while (left <= right)
//	{
//		int mid = (left + right) / 2;
//		if (arr[mid] == k)
//		{
//			printf("%d的下标是:%d", k, mid);
//			flag = 0;
//			break;
//		}
//		else if (arr[mid] > k)
//		{
//			right = mid - 1;
//		}
//		else
//		{
//			left = mid + 1;
//		}
//	}
//	if (flag)
//	{
//		printf("找不到%d的下标", k);
//	}
//	return 0;
//}



//#include<stdio.h>
//#include<math.h>
//int main()
//{
//	double ret = sqrt(101);//sqrt求开平方
//	printf("%lf", ret);
//	return 0;
//}



//重要提醒
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr[] = "abcde";//定义字符串用char，后面用“”；abcde后面隐藏了个\0
//	int a = strlen(arr);//strlen求\0前面的字符串长度，一共5个
//	int b = sizeof(arr) / sizeof(arr[0]);//sizeof求字符的个数，包括\0，一共6个
//	printf("a=%d\n", a);
//	printf("b=%d\n", b);
//	return 0;
//}
